package wci.intermediate;

import java.util.ArrayList;

/**
 * <h1>SymTabEntry</h1>
 *
 * <p>表示符号表中的某一项</p>
 *
 * <p>Copyright (c) 2009 by Ronald Mak</p>
 * <p>For instructional purposes only.  No warranties.</p>
 */
public interface SymTabEntry
{
    /**
     * @return 项名，注意这是只读的
     */
    public String getName();

    /**
     * @return 所在表
     */
    public SymTab getSymTab();

    /**
     * 为此表项增加一个新出现的行位置。
     * @param lineNumber 行号，行位置
     */
    public void appendLineNumber(int lineNumber);

    /**
     * @return 所有出现过此表项名的行位置。
     */
    public ArrayList<Integer> getLineNumbers();

    /**
     * <p>
     * 给当前表项设置一个属性，这种开放式的定义可以让各种不同类型的entry通过<br>
     * 属性来区分。
     * </p>
     * @param key 属性名，保持唯一性
     * @param value 属性值
     */
    public void setAttribute(SymTabKey key, Object value);

    /**
     * Get the value of an attribute of the entry.
     * @param key 属性名，保持唯一性
     * @return the 属性值
     */
    public Object getAttribute(SymTabKey key);
}
